@echo off
chcp 65001 >nul
title 🌱 智慧农业边缘控制系统 - Windows完整启动器
color 0A

echo.
echo ============================================================
echo          🌱 智慧农业边缘控制系统 - Windows启动器
echo ============================================================
echo.
echo 正在初始化系统...
echo.

:: 设置变量
set SYSTEM_NAME=智慧农业边缘控制系统
set MAIN_SCRIPT=智慧农业Web演示系统.py
set BACKUP_SCRIPT=简化Web系统.py
set PYTHON_MIN_VERSION=3.7
set PREFERRED_PORT=8080
set WEB_URL=
set FOUND_PORT=

:: 创建日志文件
set LOG_FILE=%~dp0system_install.log
echo [%DATE% %TIME%] 系统启动日志 > "%LOG_FILE%"

echo 📋 步骤 1: 检查系统环境
echo ----------------------------------------

:: 检查管理员权限
net session >nul 2>&1
if %errorLevel% == 0 (
    echo ✅ 管理员权限: 已获取
    echo [%DATE% %TIME%] 管理员权限检查通过 >> "%LOG_FILE%"
) else (
    echo ⚠️  管理员权限: 未获取 ^(某些功能可能受限^)
    echo [%DATE% %TIME%] 警告: 未以管理员身份运行 >> "%LOG_FILE%"
)

:: 检查Python安装
echo.
echo 🐍 检查Python环境...
python --version >nul 2>&1
if %errorLevel% == 0 (
    for /f "tokens=2" %%i in ('python --version 2^>^&1') do set PYTHON_VERSION=%%i
    echo ✅ Python已安装: !PYTHON_VERSION!
    echo [%DATE% %TIME%] Python版本: !PYTHON_VERSION! >> "%LOG_FILE%"
) else (
    echo ❌ 未检测到Python
    echo [%DATE% %TIME%] 错误: Python未安装 >> "%LOG_FILE%"
    goto :install_python
)

:: 检查pip
pip --version >nul 2>&1
if %errorLevel% == 0 (
    echo ✅ pip包管理器: 已安装
    echo [%DATE% %TIME%] pip检查通过 >> "%LOG_FILE%"
) else (
    echo ❌ pip未安装，正在尝试安装...
    python -m ensurepip --upgrade
    if %errorLevel% == 0 (
        echo ✅ pip安装成功
    ) else (
        echo ❌ pip安装失败
        goto :manual_install
    )
)

goto :check_dependencies

:install_python
echo.
echo 🔽 Python未安装，正在自动下载安装...
echo ----------------------------------------
echo.
echo 请选择安装方式:
echo 1. 自动下载安装Python 3.11 (推荐)
echo 2. 手动安装 (将打开Python官网)
echo 3. 跳过安装 (系统可能无法运行)
echo.
set /p install_choice="请输入选择 (1/2/3): "

if "%install_choice%"=="1" goto :auto_install_python
if "%install_choice%"=="2" goto :manual_install_python
if "%install_choice%"=="3" goto :skip_python
goto :install_python

:auto_install_python
echo.
echo 正在下载Python 3.11...
curl -L -o python_installer.exe "https://www.python.org/ftp/python/3.11.8/python-3.11.8-amd64.exe"
if %errorLevel% == 0 (
    echo ✅ Python下载完成
    echo 正在安装Python...
    python_installer.exe /quiet InstallAllUsers=1 PrependPath=1 Include_test=0
    if %errorLevel__ == 0 (
        echo ✅ Python安装成功
        del python_installer.exe
        echo 请重新运行此脚本...
        pause
        exit
    ) else (
        echo ❌ Python安装失败
        del python_installer.exe
        goto :manual_install_python
    )
) else (
    echo ❌ Python下载失败
    goto :manual_install_python
)

:manual_install_python
echo.
echo 🌐 正在打开Python官网进行手动安装...
start https://www.python.org/downloads/windows/
echo.
echo 请按照以下步骤安装Python:
echo 1. 下载Python 3.11或更高版本
echo 2. 运行安装程序
echo 3. ✅ 勾选 "Add Python to PATH"
echo 4. 选择 "Install Now"
echo 5. 安装完成后重新运行此脚本
echo.
pause
exit

:skip_python
echo.
echo ⚠️  跳过Python安装，系统可能无法正常运行
echo [%DATE% %TIME%] 警告: 用户跳过Python安装 >> "%LOG_FILE%"

:check_dependencies
echo.
echo 📦 步骤 2: 检查Python依赖包
echo ----------------------------------------

:: 需要的包列表
set REQUIRED_PACKAGES=flask requests matplotlib seaborn pandas numpy scikit-learn

echo 正在检查必需的Python包...
for %%p in (%REQUIRED_PACKAGES%) do (
    echo 检查: %%p
    python -c "import %%p" >nul 2>&1
    if !errorLevel! == 0 (
        echo ✅ %%p: 已安装
        echo [%DATE% %TIME%] 包 %%p 检查通过 >> "%LOG_FILE%"
    ) else (
        echo ❌ %%p: 未安装，正在安装...
        pip install %%p
        if !errorLevel! == 0 (
            echo ✅ %%p: 安装成功
            echo [%DATE% %TIME%] 包 %%p 安装成功 >> "%LOG_FILE%"
        ) else (
            echo ❌ %%p: 安装失败
            echo [%DATE% %TIME%] 错误: 包 %%p 安装失败 >> "%LOG_FILE%"
        )
    )
)

echo.
echo 🔄 升级包到最新版本...
pip install --upgrade %REQUIRED_PACKAGES%

echo.
echo 🔍 步骤 3: 端口占用检查
echo ----------------------------------------

:: 检查端口占用函数
:check_port
set PORT_TO_CHECK=%1
netstat -an | findstr :%PORT_TO_CHECK% >nul 2>&1
if %errorLevel__ == 0 (
    echo ⚠️  端口 %PORT_TO_CHECK% 被占用
    
    :: 尝试找出占用进程
    for /f "tokens=5" %%i in ('netstat -ano ^| findstr :%PORT_TO_CHECK%') do (
        set PID=%%i
        for /f "tokens=1" %%j in ('tasklist /fi "PID eq !PID!" /fo csv /nh 2^>nul') do (
            set PROCESS_NAME=%%j
            set PROCESS_NAME=!PROCESS_NAME:"=!
            echo    占用进程: !PROCESS_NAME! ^(PID: !PID!^)
        )
    )
    
    echo    选择操作:
    echo    1. 自动终止占用进程
    echo    2. 使用其他端口
    echo    3. 手动处理
    set /p port_choice="请输入选择 (1/2/3): "
    
    if "!port_choice!"=="1" (
        echo    正在终止占用进程...
        taskkill /F /PID !PID! >nul 2>&1
        if !errorLevel! == 0 (
            echo    ✅ 进程已终止
            goto :port_available
        ) else (
            echo    ❌ 进程终止失败，使用其他端口
            goto :find_alternative_port
        )
    )
    if "!port_choice!"=="2" goto :find_alternative_port
    if "!port_choice!"=="3" (
        echo    请手动处理端口占用后重新运行脚本
        pause
        exit
    )
    goto :check_port
) else (
    echo ✅ 端口 %PORT_TO_CHECK% 可用
    set FOUND_PORT=%PORT_TO_CHECK%
    goto :port_available
)

:find_alternative_port
echo 🔍 正在寻找可用端口...
for /L %%p in (8080,1,8099) do (
    netstat -an | findstr :%%p >nul 2>&1
    if !errorLevel! neq 0 (
        echo ✅ 找到可用端口: %%p
        set FOUND_PORT=%%p
        goto :port_available
    )
)

echo ❌ 端口8080-8099都被占用，使用随机端口
set FOUND_PORT=8888

:port_available
echo [%DATE% %TIME%] 使用端口: %FOUND_PORT% >> "%LOG_FILE%"

echo.
echo 📁 步骤 4: 检查系统文件
echo ----------------------------------------

:: 检查主脚本
if exist "%MAIN_SCRIPT%" (
    echo ✅ 主系统文件: %MAIN_SCRIPT%
    set SCRIPT_TO_RUN=%MAIN_SCRIPT%
    echo [%DATE_ %TIME%] 使用主系统文件 >> "%LOG_FILE%"
) else if exist "%BACKUP_SCRIPT%" (
    echo ⚠️  主系统文件未找到，使用备用文件: %BACKUP_SCRIPT%
    set SCRIPT_TO_RUN=%BACKUP_SCRIPT%
    echo [%DATE% %TIME%] 使用备用系统文件 >> "%LOG_FILE%"
) else (
    echo ❌ 系统文件未找到
    echo [%DATE% %TIME%] 错误: 系统文件未找到 >> "%LOG_FILE%"
    goto :file_not_found
)

echo.
echo 🔥 步骤 5: 启动智慧农业系统
echo ----------------------------------------

:: 设置环境变量
set FLASK_ENV=production
set PYTHONPATH=%CD%

echo 🚀 正在启动 %SYSTEM_NAME%...
echo 📄 使用脚本: %SCRIPT_TO_RUN%
echo 🌐 端口: %FOUND_PORT%
echo [%DATE% %TIME%] 启动系统: %SCRIPT_TO_RUN% 端口: %FOUND_PORT% >> "%LOG_FILE%"

:: 启动Python脚本
start /b python "%SCRIPT_TO_RUN%"

:: 等待服务启动
echo ⏳ 等待服务启动 (10秒)...
timeout /t 10 /nobreak >nul

:: 检查服务是否启动成功
:check_service
echo 🔍 检查服务状态...
curl -s http://localhost:%FOUND_PORT% >nul 2>&1
if %errorLevel% == 0 (
    echo ✅ 服务启动成功!
    set WEB_URL=http://localhost:%FOUND_PORT%
    echo [%DATE% %TIME%] 服务启动成功: %WEB_URL% >> "%LOG_FILE%"
    goto :open_browser
) else (
    :: 尝试其他常用端口
    for %%p in (8080 8081 8082 8083 8084 8085) do (
        curl -s http://localhost:%%p >nul 2>&1
        if !errorLevel! == 0 (
            echo ✅ 发现服务运行在端口: %%p
            set WEB_URL=http://localhost:%%p
            echo [%DATE% %TIME%] 发现服务: !WEB_URL! >> "%LOG_FILE%"
            goto :open_browser
        )
    )
    
    echo ❌ 服务启动失败，尝试其他解决方案...
    goto :troubleshoot
)

:open_browser
echo.
echo 🌐 步骤 6: 打开智慧农业系统
echo ----------------------------------------

echo 🎉 系统启动成功!
echo 📍 访问地址: %WEB_URL%
echo [%DATE% %TIME%] 准备打开浏览器: %WEB_URL% >> "%LOG_FILE%"

:: 尝试多种方式打开浏览器
echo 🚀 正在打开浏览器...

:: 方法1: 使用默认浏览器
start %WEB_URL%
timeout /t 2 /nobreak >nul

:: 方法2: 使用Chrome (如果存在)
if exist "C:\Program Files\Google\Chrome\Application\chrome.exe" (
    start "Chrome" "C:\Program Files\Google\Chrome\Application\chrome.exe" %WEB_URL%
)

:: 方法3: 使用Edge
if exist "C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" (
    start "Edge" "C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" %WEB_URL%
)

echo.
echo ============================================================
echo                   🎉 启动完成!
echo ============================================================
echo.
echo 🌱 %SYSTEM_NAME% 已成功启动
echo 🌐 Web访问地址: %WEB_URL%
echo 📱 手机访问: http://[您的IP地址]:%FOUND_PORT%
echo 📋 日志文件: %LOG_FILE%
echo.
echo ✨ 系统功能:
echo    • 15种环境传感器实时监控
echo    • 智能灌溉自动控制系统  
echo    • AI病虫害风险评估
echo    • 多维度数据趋势分析
echo    • 设备状态实时监控
echo    • 智能警报和通知系统
echo.
echo 🔧 故障排除:
echo    • 如果网页无法打开，请检查防火墙设置
echo    • 如果数据不更新，请刷新页面
echo    • 如需停止系统，请关闭此窗口
echo.
echo [按任意键退出启动器，系统将继续在后台运行]
pause >nul

echo [%DATE% %TIME%] 启动器正常退出 >> "%LOG_FILE%"
exit

:troubleshoot
echo.
echo 🔧 系统故障排除
echo ----------------------------------------

echo ❌ 服务启动失败，正在诊断问题...

:: 检查Python进程
tasklist | findstr python >nul 2>&1
if %errorLevel% == 0 (
    echo ✅ Python进程运行中
) else (
    echo ❌ Python进程未找到
)

:: 检查文件权限
echo 📁 检查文件权限...
if exist "%SCRIPT_TO_RUN%" (
    echo ✅ 脚本文件存在
) else (
    echo ❌ 脚本文件不存在或无权限访问
)

:: 尝试备用启动方式
echo.
echo 🔄 尝试备用启动方式...

:: 方式1: 直接运行简化版本
if exist "基础测试.py" (
    echo 🧪 启动基础测试服务...
    start /b python "基础测试.py"
    timeout /t 5 /nobreak >nul
    
    curl -s http://localhost:8085 >nul 2>&1
    if !errorLevel! == 0 (
        echo ✅ 基础测试服务启动成功!
        set WEB_URL=http://localhost:8085
        goto :open_browser
    )
)

:: 方式2: 创建临时测试服务
echo 🛠️  创建临时测试服务...
echo from flask import Flask > temp_server.py
echo app = Flask(__name__) >> temp_server.py
echo @app.route('/') >> temp_server.py
echo def hello(): >> temp_server.py
echo     return '''HTML''' >> temp_server.py
echo if __name__ == '__main__': >> temp_server.py
echo     app.run(host='0.0.0.0', port=8888) >> temp_server.py

start /b python temp_server.py
timeout /t 5 /nobreak >nul

curl -s http://localhost:8888 >nul 2>&1
if %errorLevel% == 0 (
    echo ✅ 临时服务启动成功!
    set WEB_URL=http://localhost:8888
    goto :open_browser
)

goto :manual_install

:file_not_found
echo.
echo 📁 系统文件未找到
echo ----------------------------------------

echo ❌ 智慧农业系统文件未找到
echo.
echo 请确保以下文件存在于当前目录:
echo 1. %MAIN_SCRIPT%
echo 2. %BACKUP_SCRIPT% (备用)
echo 3. 基础测试.py (最小测试)
echo.
echo 🔄 是否创建基础测试文件? (y/n)
set /p create_test="请输入选择: "

if "%create_test%"=="y" (
    goto :create_basic_test
) else (
    goto :manual_install
)

:create_basic_test
echo 🛠️  正在创建基础测试文件...

echo from flask import Flask > 基础测试.py
echo app = Flask(__name__) >> 基础测试.py
echo. >> 基础测试.py
echo @app.route('/') >> 基础测试.py
echo def hello(): >> 基础测试.py
echo     return '''^^^< html^^^>^^^<head^^^>^^^<title^^^>基础测试^^^</title^^^>^^^</head^^^>''' >> 基础测试.py
echo if __name__ == '__main__': >> 基础测试.py
echo     app.run(host='0.0.0.0', port=8085) >> 基础测试.py

echo ✅ 基础测试文件创建完成
set SCRIPT_TO_RUN=基础测试.py
set FOUND_PORT=8085
goto :open_browser

:manual_install
echo.
echo 📋 手动安装指南
echo ----------------------------------------

echo 请按照以下步骤手动设置系统:
echo.
echo 1. 📥 下载完整的智慧农业系统文件
echo 2. 🐍 确保Python 3.7+已安装
echo 3. 📦 安装依赖: pip install flask requests matplotlib pandas numpy
echo 4. 🚀 运行: python 智慧农业Web演示系统.py
echo 5. 🌐 访问: http://localhost:8080
echo.
echo 💡 技术支持:
echo    • 检查Python版本: python --version
echo    • 检查pip: pip --version  
echo    • 安装包: pip install 包名
echo    • 查看端口: netstat -an | findstr :8080
echo.

:end
echo [%DATE% %TIME%] 启动器结束 >> "%LOG_FILE%"
echo 📋 完整日志已保存到: %LOG_FILE%
echo.
pause